package demo3;
/*编写1个Java应用程序，该程序包括3个类： A类、B类和主类E。其中类B是类A的子类，
在子类B中新增了成员变量和成员方法，并且隐藏了父类A的成员变量和重写了父类A的成员方法。
在主类E的main方法中，创建类B的对象并赋给父类A的对象a，使用上转型对象a来测试上转型对象的一些特性。
 */

/*<1>上转型对象不能操作子类新增的成员变量和成员方法

<2>上转型对象能使用父类被继承或重写的成员方法、被继承或被隐藏的成员变量

<3>如果子类重写了父类的方法，则上转型对象调用该方法时一定调用的是重写后的方法          （多态）

<4>如果子类重新定义了父类的同名变量，则上转型对象访问该变量时必定访问的是父类本          身的变量，而不是子类定义的变量
*/
class A{
    String name="张三";
    String color="绿色";

    public void eat(){
        System.out.println("调用父类A的eat()方法");
    }
}
class B extends A{
    int age;
    String color="黄色";

    public void play(){
        System.out.println("调用子类B新增方法play()");
    }
    public void eat(){
        System.out.println("调用子类B重写的eat()方法");
    }
}
public class E {
    public static void main(String[] args) {
        A b=new B();
        System.out.println(b.color);//如果子类重新定义了父类的同名变量，则上转型对象访问该变量时必定访问的是父类本身的变量
        System.out.println(b.name);
        b.eat();//如果子类重写了父类的方法，则上转型对象调用该方法时一定调用的是重写后的方法
        //上转型对象不能操作子类新增的成员变量和成员方法
    }
}



